package com.longcai.utils.fuyoupay;

import com.longcai.constants.SplitConstant;

/***
 * 富友 请求参数生成签名
 */
public class RequestSigna {

    /****
     * 获取企业开户签名的方法
     * @param artifNm 法人姓名
     * @param bankLicense 开户银行许可证号
     * @param MchntCd
     * @param MchntTxnSsn
     * @param bankNm 开户行支行名称
     * @param brandName    品牌名称
     * @param capacntno 帐号
     * @param certifId 设置法人证件号
     * @param cityId 开户行地区代码
     * @param taxNum 税务登记号
     * @param licenseIndate 营业执照有效期
     * @param custNm 企业名称
     * @param ver
     * @return
     */
    public String getAddUserSigna(String artifNm, String bankLicense, String MchntCd, String MchntTxnSsn, String bankNm, String brandName, String capacntno, String certifId, String cityId, String taxNum, String licenseIndate, String custNm, String ver) {
        String str = artifNm + "|"
                + bankLicense + "|"
                + MchntCd + "|"
                + MchntTxnSsn + "|"
                + bankNm + "|"
                + brandName + "|"
                + capacntno + "|"
                + certifId + "|"
                + cityId + "|"
                + taxNum + "|"
                + licenseIndate + "|"
                + custNm + "|" + ver;
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取个人/小微企业开户签名
     *
     * @param artifNm    户名
     * @param mchntCd    商户代码
     * @param mhntTxnSsn 请求流水号
     * @param bankNm     开户行支行名称
     * @param certifId   证件号码
     * @param cityId     开户行地区代码
     * @param mobileNo   手机号码
     * @param ver        接口版本号
     * @return
     */
    public String getSmallUserSigna(String artifNm, String mchntCd, String mhntTxnSsn, String bankNm, String certifId, String cityId, String mobileNo, String ver) {
        String str = artifNm + "|"
                + mchntCd + "|"
                + mhntTxnSsn + "|"
                + bankNm + "|"
                + certifId + "|"
                + cityId + "|"
                + mobileNo + "|" + ver;

        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }


    /**
     * 获取银行卡变更签名
     *
     * @param artifNm      户名
     * @param bankLicense  开户银行许可证号
     * @param MchntCd      商户代码
     * @param MchntTxnSsn  商户流水
     * @param LoginId      用户id
     * @param capacntno    账号
     * @param parentBankId 开户行行别
     * @param cityId       开户地区代码
     * @param userType     用户类型
     * @param mobileNo     手机号
     * @return
     */
    public String getUpdateUserSigna(String artifNm, String bankLicense, String MchntCd, String MchntTxnSsn, String LoginId, String capacntno, String parentBankId, String cityId, String userType, String mobileNo) {
        String str = artifNm + "|"
                + bankLicense + "|"
                + MchntCd + "|"
                + MchntTxnSsn + "|"
                + LoginId + "|"
                + capacntno + "|"
                + parentBankId + "|"
                + cityId + "|"
                + userType + "|"
                + mobileNo;

        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取分账接口签名
     *
     * @param mchntCd     商户代码
     * @param splitSsn    分账编号
     * @param mchntTxnNum 交易流水号
     * @return
     */
    public String getFenZhangPortSigna(String mchntCd, String splitSsn, String mchntTxnNum) {
        String str = mchntCd + "|"
                + splitSsn + "|"
                + mchntTxnNum;

        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取分账导入签名
     *
     * @param mchntCd   商户代码
     * @param autoSplit 自动分账
     * @return
     */
    public String getFzImportSigna(String mchntCd, String autoSplit) {
        String str = mchntCd + "|"
                + autoSplit;

        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取提现签名
     *
     * @param mchntCd       商户代码
     * @param loginId       用户id
     * @param amt           提现金额
     * @param pageNotifyUrl 商户返回地址
     * @param backNotifyUrl 商户后台通知地址
     * @param ver           接口版本号
     * @return
     */
    public String getCashSigna(String mchntCd, String loginId, String amt, String pageNotifyUrl, String backNotifyUrl, String ver) {
        String str = mchntCd + "|"
                + loginId + "|"
                + amt + "|"
                + pageNotifyUrl + "|"
                + backNotifyUrl + "|"
                + ver;
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取网银充值签名
     *
     * @param mchntCd       商户代码
     * @param loginId       用户id
     * @param amt           提现金额
     * @param pageNotifyUrl 商户返回地址
     * @param backNotifyUrl 商户后台通知地址
     * @return
     */
    public String getNetRechareSigna(String mchntCd, String loginId, String amt, String pageNotifyUrl, String backNotifyUrl) {
        String str = mchntCd + "|"
                + loginId + "|"
                + amt + "|"
                + pageNotifyUrl + "|"
                + backNotifyUrl;
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取线上支付签名
     *
     * @param intoAccount 入账户
     * @param mchntTxnSsn 商户流水
     * @param mchntCd     商户代码
     * @param paymentType 支付方式
     * @param termIp      终端ip
     * @param amt         交易金额
     * @return
     */
    public String getLineRechareSigna(String intoAccount, String mchntTxnSsn, String mchntCd, String paymentType, String termIp, String amt) {
        String str = intoAccount + "|"
                + mchntTxnSsn + "|"
                + mchntCd + "|"
                + paymentType + "|"
                + termIp + "|"
                + amt;
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获得普通支付（余额支付）签名
     *
     * @param paymentType    支付类型
     * @param channel        交易来源
     * @param outAccount     出账户id
     * @param intoAccount    入账户id
     * @param accountNm      户名
     * @param parentBankId   开户行行别代码
     * @param parentBankName 开户行名称
     * @param bankCardNo     卡号
     * @param amt            交易金额
     * @param protocolNum    协议号（支付类型为 02 时必填 ）
     * @param purpose        交易用途
     * @param goodsType      商品类型
     * @param subject        商品名称
     * @param goodsDes       商品描述
     * @param goodsQuanity   商品数量
     * @param splitSsn       分账账号
     * @param splitType      直接分账
     * @param backNotifyUrl  通知url
     * @param mchntCd        商户代码
     * @param mchntTxnSsn    商户流水
     * @param ver            接口版本号
     */
    public String CommonPaySigna(String paymentType, String channel, String outAccount, String intoAccount, String accountNm, String parentBankId, String parentBankName, String bankCardNo, String amt, String protocolNum, String purpose, String goodsType, String subject, String goodsDes, String goodsQuanity, String splitSsn, String splitType, String backNotifyUrl, String mchntCd, String mchntTxnSsn, String ver) {
        String str = paymentType + "|" + channel + "|" + outAccount + "|" + intoAccount + "|" + accountNm + "|" + parentBankId +
                "|" + parentBankName + "|" + bankCardNo + "|" + amt + "|" + protocolNum + "|" + purpose + "|" + goodsType +
                "|" + subject + "|" + goodsDes + "|" + goodsQuanity + "|" + splitSsn + "|" + splitType + "|" + backNotifyUrl +
                "|" + mchntCd + "|" + mchntTxnSsn + "|" + ver;
        System.out.println(str + "加密前");
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取普通支付（验证码验证）第二步签名
     *
     * @param paymentType 支付类型
     * @param mchntTxnNum 原流水号
     * @param smsCode     验证码
     * @param mchntCd     商户代码
     * @param mchntTxnSsn 商户流水
     * @param ver         接口版本
     * @return
     */
    public String CommonPayStep2Signa(String paymentType, String mchntTxnNum, String smsCode, String mchntCd, String mchntTxnSsn, String ver) {
        String str = paymentType + "|"
                + mchntTxnNum + "|"
                + smsCode + "|"
                + mchntCd + "|"
                + mchntTxnSsn + "|"
                + ver;
        System.out.println(str + "加密前");
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取退款请求签名
     *
     * @param mchntCd     商户代码
     * @param mchntTxnNum 原流水号
     * @param amt         订单金额
     * @param refundAmt   退款金额
     * @param mchntTxnSsn 商户流水
     * @return
     */
    public String getRefundSigna(String mchntCd, String mchntTxnNum, String amt, String refundAmt, String mchntTxnSsn) {
        String str = mchntCd + "|" + mchntTxnNum + "|" + amt + "|" + refundAmt + "|" + mchntTxnSsn;
        System.out.println(str + "加密前");
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 获取交易查询请求签名
     *
     * @param mchntCd 商户代码
     * @param custNo  交易用户
     * @param payType 支付类型
     * @return
     */
    public String getTradeSearchSigna(String mchntCd, String custNo, String payType) {
        String str = mchntCd + "|" + custNo + "|" + payType;
        System.out.println(str + "加密前");
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    /**
     * 微信订单请求签名
     *
     * @param mchntCd     商户代码
     * @param custNo      交易用户
     * @param paymentType 支付类型
     * @param orderType   订单类型
     * @param tradeType   交易类型
     * @param mchntTxnNum 原交易账单号
     * @param startDay    起始日期
     * @param endDay      结束日期
     * @param mchntTxnSsn 商户流水
     * @param ver         接口版本
     * @return
     */
    public String getWeiXinOrderSigna(String mchntCd, String custNo, String paymentType, String orderType, String tradeType, String mchntTxnNum, String startDay, String endDay, String mchntTxnSsn, String ver) {
        String str = mchntCd + "|" + custNo + "|" + paymentType + "|" + orderType + "|" + tradeType + "|" + mchntTxnNum + "|" + startDay + "|" + endDay + "|" + mchntTxnSsn + "|" + ver;
        System.out.println(str + "加密前");
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }

    public String getBalanceSearchSigna(String mchntCd, String custNo, String paymentType, String orderType, String tradeType, String mchntTxnNum, String startDay, String endDay, String mchntTxnSsn, String ver) {
        String str = mchntCd + "|" + custNo + "|" + paymentType + "|" + orderType + "|" + tradeType + "|" + mchntTxnNum + "|" + startDay + "|" + endDay + "|" + mchntTxnSsn + "|" + ver;
        System.out.println(str + "加密前");
        return FuiouRsaCipher.sign2Base64(SplitConstant.PRI_SIGN_KEY, str);
    }
}
